package administracion.managedBean.usuarios;

import Entities.Cliente;
import ejb.UsuarioFacadeLocal;
import java.io.Serializable;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import org.primefaces.context.RequestContext;
import util.PageCodeGenerico;

@ManagedBean
@ViewScoped
public class PCConsultaUsuario extends PageCodeGenerico implements Serializable {

    @EJB
    private UsuarioFacadeLocal usuarioFacade;
    private boolean condicion;
    /*
     *     Atributos
     */
    private String nombre;
    private String apellido;
    private Integer telefono;
    private Integer celular;
    private Date fechaNac;
    private String email;
    private String ciudad;
    private String calle;
    private Integer departamento;
    private Integer rol;
    private String nombreUsuario;
    private String contrasenia;
    private Integer numero;
    private String detalle;
    private boolean activo;
    private byte[] imagen;
    private String contraseniaNueva;
    //Cliente
    private String rut;
    private String fechaActual;

    public PCConsultaUsuario() {
        this.condicion = false;
        Calendar cal = Calendar.getInstance();
        fechaActual = cal.get(Calendar.DATE) + "/" + (cal.get(Calendar.MONTH) + 1) + "/" + cal.get(Calendar.YEAR);
    }

    /*
     *      Getters and Setters 
     */
    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public String getApellido() {
        return apellido;
    }

    public void setApellido(String apellido) {
        this.apellido = apellido;
    }

    public Integer getTelefono() {
        return telefono;
    }

    public void setTelefono(Integer telefono) {
        this.telefono = telefono;
    }

    public Integer getCelular() {
        return celular;
    }

    public void setCelular(Integer celular) {
        this.celular = celular;
    }

    public Date getFechaNac() {
        return fechaNac;
    }

    public void setFechaNac(Date fechaNac) {
        this.fechaNac = fechaNac;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getCiudad() {
        return ciudad;
    }

    public void setCiudad(String ciudad) {
        this.ciudad = ciudad;
    }

    public String getCalle() {
        return calle;
    }

    public void setCalle(String calle) {
        this.calle = calle;
    }

    public Integer getDepartamento() {
        return departamento;
    }

    public void setDepartamento(Integer departamento) {
        this.departamento = departamento;
    }

    public Integer getRol() {
        return rol;
    }

    public void setRol(Integer rol) {
        this.rol = rol;
    }

    public String getNombreUsuario() {
        return nombreUsuario;
    }

    public void setNombreUsuario(String nombreUsuario) {
        this.nombreUsuario = nombreUsuario;
    }

    public String getContrasenia() {
        return contrasenia;
    }

    public void setContrasenia(String contrasenia) {
        this.contrasenia = contrasenia;
    }

    public Integer getNumero() {
        return numero;
    }

    public void setNumero(Integer numero) {
        this.numero = numero;
    }

    public String getDetalle() {
        return detalle;
    }

    public void setDetalle(String detalle) {
        this.detalle = detalle;
    }

    public boolean isActivo() {
        return activo;
    }

    public void setActivo(boolean activo) {
        this.activo = activo;
    }

    public byte[] getImagen() {
        return imagen;
    }

    public void setImagen(byte[] imagen) {
        this.imagen = imagen;
    }

    public String getRut() {
        return rut;
    }

    public void setRut(String rut) {
        this.rut = rut;
    }

    public String getContraseniaNueva() {
        return contraseniaNueva;
    }

    public void setContraseniaNueva(String contraseniaNueva) {
        this.contraseniaNueva = contraseniaNueva;
    }

    public boolean isCondicion() {
        return condicion;
    }

    public void setCondicion(boolean condicion) {
        this.condicion = condicion;
    }

    public String getFechaActual() {
        return fechaActual;
    }

    public void setFechaActual(String fechaActual) {
        this.fechaActual = fechaActual;
    }
    
    private Calendar convertirDateACalendar(Date date) {
        if (date != null) {
            Calendar cal;
            DateFormat format = new SimpleDateFormat("dd/MM/yyyy");
            format.format(date);
            cal = format.getCalendar();
            return cal;
        } else {
            return null;
        }
    }

    private Integer convertirCi(String ci) {
        if (!ci.equals("")) {
            String devolver = ci;
            devolver = devolver.replace(".", "");
            devolver = devolver.replace("-", "");
            return Integer.parseInt(devolver);
        } else {
            return 0;
        }
    }

    public String crearCuenta() {
        String resultado = "correcto";
        try {
            if (!usuarioFacade.existeUsuario(this.nombreUsuario)) {
                try {
                    Cliente cli = new Cliente(this.rut, this.nombreUsuario,
                            this.contrasenia, this.nombre, this.apellido, this.telefono,
                            this.celular, this.convertirDateACalendar(this.fechaNac),
                            this.email, 3, this.departamento, this.ciudad,
                            this.calle, this.numero, this.detalle);
                    usuarioFacade.crear(cli);
                    super.setearInfo("Usuario creado con éxito");
                    RequestContext.getCurrentInstance().addCallbackParam("correcto", true);
                } catch (Exception e) {
                    super.setearError(e);
                    RequestContext.getCurrentInstance().addCallbackParam("correcto", false);
                    resultado = "error";
                }
            } else {
                super.setearAdvertencia("El Nombre de Usuario ya existe en el Sistema");
                RequestContext.getCurrentInstance().addCallbackParam("correcto", false);
                resultado = "";
            }
        } catch (Exception ex) {
            Logger.getLogger(PCConsultaUsuario.class.getName()).log(Level.SEVERE, null, ex);
        }
        return resultado;
    }
}
